

const appid = 'wx7fbcdbc1bfc568ba';
const appsecret = '7b1fbb6d24ad3af339b3308f72339a1a';

export const add=(x, y)=>{
  return ((x & 0x7FFFFFFF) + (y & 0x7FFFFFFF)) ^ (x & 0x80000000) ^ (y & 0x80000000);
}

export const SHA1hex=(num)=>{
  var sHEXChars = "0123456789abcdef";
  var str = "";
  for (var j = 7; j >= 0; j--)
    str += sHEXChars.charAt((num >> (j * 4)) & 0x0F);
  return str;
}

export const AlignSHA1=(sIn)=>{
  var nblk = ((sIn.length + 8) >> 6) + 1,
    blks = new Array(nblk * 16);
  for (var i = 0; i < nblk * 16; i++) blks[i] = 0;
  for (i = 0; i < sIn.length; i++)
    blks[i >> 2] |= sIn.charCodeAt(i) << (24 - (i & 3) * 8);
  blks[i >> 2] |= 0x80 << (24 - (i & 3) * 8);
  blks[nblk * 16 - 1] = sIn.length * 8;
  return blks;
}

export const rol=(num, cnt)=>{
  return (num << cnt) | (num >>> (32 - cnt));
}

export const ft=(t1, b, c, d)=>{
  if (t1 < 20) return (b & c) | ((~b) & d);
  if (t1 < 40) return b ^ c ^ d;
  if (t1 < 60) return (b & c) | (b & d) | (c & d);
  return b ^ c ^ d;
}

export const kt=(t2)=>{
  return (t2 < 20) ? 1518500249 : (t2 < 40) ? 1859775393 :
    (t2 < 60) ? -1894007588 : -899497514;
}

export const SHA1=(sIn)=>{
  var x = AlignSHA1(sIn);
  var w = new Array(80);
  var a = 1732584193;
  var b = -271733879;
  var c = -1732584194;
  var d = 271733878;
  var e = -1009589776;
  var t;
  for (var i = 0; i < x.length; i += 16) {
    var olda = a;
    var oldb = b;
    var oldc = c;
    var oldd = d;
    var olde = e;
    for (var j = 0; j < 80; j++) {
      if (j < 16) w[j] = x[i + j];
      else w[j] = rol(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1);
      t = add(add(rol(a, 5), ft(j, b, c, d)), add(add(e, w[j]), kt(j)));
      e = d;
      d = c;
      c = rol(b, 30);
      b = a;
      a = t;
    }
    a = add(a, olda);
    b = add(b, oldb);
    c = add(c, oldc);
    d = add(d, oldd);
    e = add(e, olde);
  }
  let SHA1Value = SHA1hex(a) + SHA1hex(b) + SHA1hex(c) + SHA1hex(d) + SHA1hex(e);
  return SHA1Value.toUpperCase();
}

export const GetUrl=(url1,call,errorCall)=> {
  let url = "http://ppk.pinpke.cn/util?url=" + encodeURIComponent(url1);
  fetch(url, {
    method: 'GET',
    mode: "cors",
    headers: {
      'Accept': 'application/json',
      'Content-Type': 'application/json',
    },
    credentials: 'same-origin'
  })
    .then((response) => response.json())
    .then((response) => {call(response);})
    .catch(error => {errorCall(error)})
}

const WeiFX=(url1,img,name,desc)=>{
  var timestamp = Date.parse(new Date());
  timestamp=timestamp.toString().substring(0,10);
  let V="jsapi_ticket="+sessionStorage.ticket+"&noncestr=8090188&timestamp="+timestamp+"&url="+window.location.href;
  let sha1=SHA1(V).toLocaleLowerCase();
  wx.config({
    debug: true,
    appId: appid,
    timestamp: timestamp,
    nonceStr: '8090188',
    signature: sha1,
    jsApiList: ["onMenuShareAppMessage","onMenuShareTimeline"]
  });
  wx.ready(function(){
    let obj={
      title:name,
      link:url1,
      imgUrl:img,
    }
    let obj1={
      title:name,
      desc:desc,
      imgUrl: img,
      type: 'link',
      link:url1,
    }
    wx.onMenuShareAppMessage(obj1);
    wx.onMenuShareTimeline(obj);
  });
  wx.error(function(res){
    console.log('微信接口校验失败')
  });
}

export let url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appid+"&secret="+appsecret;
export const WxShare=(url1,img,name,desc)=>{
  if(sessionStorage.ticket){
    WeiFX(url1,img,name,desc);
  }else{
    GetUrl(url,(obj1)=>{
      let token=obj1.access_token;
      url='https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token='+token+'&type=jsapi';
      GetUrl(url,(obj2)=>{
        if(obj2.errcode==0){
          sessionStorage.ticket=obj2.ticket;
          WeiFX(url1,img,name,desc);
        }
      },(error2)=>{
        console.log(error2);
        console.log('第二重复错误');
      });
    },(error)=>{
      console.log(error);
      console.log('第一重错误')
    })
  }
}
